package register;

import java.awt.*;
import java.sql.*;

import javax.swing.*;
import java.awt.event.*;

public class LoginSystem implements ActionListener {
	static JFrame jf = new JFrame("SQL终端登录对话框");
	static JTextField jtf1 = new JTextField(15); // 用户名对话框

	static JTextField jtf2 = new JTextField(15); // 用户密码对话框

	static JButton jb3 = new JButton("注册"); // 全局要用，注册按钮

	static JLabel jl1 = new JLabel("欢迎登录");
	static JLabel mas = new JLabel("");
	Font f = new Font("揩体", Font.ITALIC, 15);
	
	/**
	 * @监听按钮事件
	 */
	public void actionPerformed(ActionEvent ae) {
		String comm = ae.getActionCommand();
		if ("登录".equals(comm)) {
			login(jtf1.getText(), jtf2.getText());		//调用登录方法，传两参数
		} else if ("注册".equals(comm)) {
			regsiter(jtf1.getText(), jtf2.getText());
		}  else {
			System.exit(0);
		}
	}

	/**
	 * @构造：
	 * 将JFrame的布局设置为GridLayout模式，六行一列，
	 * 将JTextArea和JButton放在JPanel里。
	 * 将JPanel文本标签框放在JFrame里，
	 */
	public LoginSystem() {
		
		jf.setLayout(new GridLayout(5, 1));		
		JPanel[] jp = new JPanel[5];
		
		for (int i = 0; i < jp.length; i++) {
			jp[i] = new JPanel();					//循环将JPanel添加到JFrame
			jf.add(jp[i]);
		}
		jp[0].add(jl1);
		JLabel jl2 = new JLabel("用户名：");
		jl2.setFont(f);
		jp[1].add(jl2);
		jp[1].add(jtf1);
		JLabel jl3 = new JLabel("  密 码 ：");
		jl3.setFont(f);
		jp[2].add(jl3);
		jp[2].add(jtf2);
		JButton jb1 = new JButton("登录");
		jb1.setFont(f);
		JButton jb2 = new JButton("退出");
		jb2.setFont(f);
		jb3.setFont(f);
		jp[3].add(jb1);
		jp[3].add(jb2);
		jp[3].add(jb3);
		jp[4].add(mas);
		jf.setFont(f);	
		jtf1.setFont(f);
		jtf2.setFont(f);								//文本框的字体设为预订的字体
		jl1.setFont(f);								//将标签提示的字体设为预订的字体
		jb1.addActionListener(this);
		jb2.addActionListener(this);
		jb3.addActionListener(this);
		jf.setLocation(300, 200);	// 设置出现位置
		jf.pack();							//设置窗口大小为自动
		jf.setVisible(true);			// 设置可见
		jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

	}

	/**
	 * 
	 * @登录方法：
	 */
	public void login(String name, String pwd) {

		Statement stmt = null;
		ResultSet rs = null;
		Connection con = null;

		try {
			con = JdbcTools.getConn();
			stmt = con.createStatement();
			String sql = "select * from admini";
			stmt.executeQuery(sql);
			rs = stmt.getResultSet();
			while (rs.next()) {
				if (rs.getString(2).equals(name)
						&& rs.getString(3).equals(pwd)) {
					Control control = new Control();
					jf.setVisible(false);	
					jtf1.setText(" ");
					jtf2.setText(" ");
					break;
				}
			}
			if (rs.isAfterLast()) {
				jl1.setText("此用户不存在");
			}
		} catch (Exception e) {
			e.printStackTrace();
			 jl1.setText("用户不存在");
		} finally {
			JdbcTools.close(rs, stmt, con);
		}
	}

	/**
	 * @注册方法
	 *	先查询数据库中是否存在该用户，
	 *	如果存在了，则提示该用户一存在
	 *	否则，进入注册代码，
	 */
	public void regsiter(String name, String pwd) {
		Statement stmt = null;
		ResultSet rs = null;
		Connection con = null;
		try {
			con = JdbcTools.getConn();
			stmt = con.createStatement();
			String sql = "select * from admini";
			rs=stmt.executeQuery(sql);
			while (rs.next()) {		
				if (rs.getString(2).equals(jtf1.getText())
						&& rs.getString(3).equals(jtf2.getText())) {
					jl1.setText("此用户已存在");
					break;
				}
			}
			if (rs.isAfterLast()) {
				if (name.matches("^[A-Za-z0-9]{1,10}$")
						&& pwd.matches("[A-Za-z0-9]{1,10}")) {
					String sql2 = "insert into bbc values('" + name + "','"
							+ pwd + "')";
					stmt.executeUpdate(sql2);
					jl1.setText("注册成功!");
					mas.setText("");
					jtf1.setText("");
					jtf2.setText("");
				} else {
					mas.setText("<html>格式均为数字,字母下划线组成<br>长度为1-8位</html>");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			try {
				con.rollback();
			} catch (Exception ee) {
				ee.printStackTrace();
			}
		} finally {
			JdbcTools.close(rs, stmt, con);
		}
	}

	public static void main(String[] args) {
		new LoginSystem();
	}

}
